from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap
from flask_login import LoginManager
from config import Config

# 1. 在全局实例化扩展，但不初始化
db = SQLAlchemy()
bootstrap = Bootstrap()
login_manager = LoginManager()
# 4. (任务四修复) 配置 login_manager
login_manager.login_view = 'auth.login'  # 设置登录页面的路由
login_manager.login_message = '请先登录以访问此页面。'

def create_app():
    # 2. 定义应用工厂
    app = Flask(__name__)
    app.config.from_object(Config) # 从 config.py 加载配置

    # 3. 使用 init_app() 方法延迟初始化扩展
    db.init_app(app)
    bootstrap.init_app(app)
    login_manager.init_app(app)

    # 5. (任务三) 注册蓝图
    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth') # 认证蓝图，带 /auth 前缀

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint) # 主蓝图，不带前缀 (即 '/')

    # (注意：@login_manager.user_loader 已移至 models.py)

    return app

